package com.intct.hbase.ddl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.intct.util.ConnectionHBaseUtils;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

/**
 * @author gufg
 * @since 2025/6/12
 */
public class CreateTable {


    public static void main(String[] args) throws IOException {
        // 连接HBase
        Connection connection = ConnectionHBaseUtils.getConnection();

        // 创建Admin实例
        Admin admin = connection.getAdmin();

        // 定义Table名称
        String ns = "intct_80_api";
        String tName = "t4";
        TableName tableName = TableName.valueOf(ns, tName);

        // 调用模拟json字符串
        String jsonStr = getJSONArray();

        try {
            // 判断表不存在
            if (!admin.tableExists(tableName)) {
                // 表描述
                TableDescriptorBuilder tableDescriptorBuilder = TableDescriptorBuilder.newBuilder(tableName);

                List<ColumnFamilyDescriptor> cfd = new ArrayList<>();

                // 解析字符口串为json数组
                JSONArray jsonArray = JSONArray.parseArray(jsonStr);

                for (Object jsonArr : jsonArray) {
                    // 解析jsonArray中元素为JSONObject
                    JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(jsonArr));

                    // 获取JSONObject中的Key的值
                    String family = jsonObject.getString("family");
                    String versions = jsonObject.getString("versions");

                    // 列族描述  Java将字符串转为byte数组???? == > 字符串.getBytes();
                    ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes(family));

                    // 版本
                    columnFamilyDescriptorBuilder.setMaxVersions(Integer.parseInt(versions));

                    // 将列族描述放到集合中
                    cfd.add(columnFamilyDescriptorBuilder.build());
                }

//                // 列族描述  Java将字符串转为byte数组???? == > 字符串.getBytes();
//                ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f1"));
//                // 版本
//                columnFamilyDescriptorBuilder.setMaxVersions(5);
//
//                cfd.add(columnFamilyDescriptorBuilder.build());
//
//                // 列族描述  Java将字符串转为byte数组???? == > 字符串.getBytes();
//                ColumnFamilyDescriptorBuilder columnFamilyDescriptorBuilder2 = ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("f2"));
//                // 版本
//                columnFamilyDescriptorBuilder2.setMaxVersions(3);
//
//                cfd.add(columnFamilyDescriptorBuilder2.build());



                // 增加列族
//                tableDescriptorBuilder.setColumnFamily(columnFamilyDescriptorBuilder.build());

                tableDescriptorBuilder.setColumnFamilies(cfd);

                // 声明分区的byte二维数组
                byte[][] splitKeys = new byte[][]{
                    Bytes.toBytes("10"),Bytes.toBytes("20"),Bytes.toBytes("30"),Bytes.toBytes("40")
                };

                // 创建表
                admin.createTable(tableDescriptorBuilder.build(), splitKeys);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (admin != null) {
                admin.close();
            }
        }
    }

        /*
    String json;

    [
        {
            "family":"f1",
            "versions":"1"
        },
        {
            "family":"f2",
            "versions":"3"
        },
        {
            "family":"f3",
            "versions":"5"
        }
    ]
     */
    private static String getJSONArray() {
        JSONArray jsonArray = new JSONArray();

        JSONObject jsonObject = new JSONObject();
        jsonObject.put("family", "f1");
        jsonObject.put("versions", "1");
        jsonArray.add(jsonObject);

        JSONObject jsonObject2 = new JSONObject();
        jsonObject2.put("family", "f2");
        jsonObject2.put("versions", "3");
        jsonArray.add(jsonObject2);

        JSONObject jsonObject23 = new JSONObject();
        jsonObject23.put("family", "f3");
        jsonObject23.put("versions", "3");
        jsonArray.add(jsonObject23);

        return jsonArray.toJSONString();
    }
}















